#!/bin/bash
#######################################################################################
# MoodleSync 0.1 
# Programmer: Ruben Cancho
#
# TODO: http://code.google.com/p/moodlesync/wiki/PageName?ts=1269002113&updated=PageName
#######################################################

# Function: get_config_list config_file
          # Purpose : Print the list of configs from config file
get_config_list()
{
   typeset config_file=$1

   awk -F '[][]' '
      NF==3 && $0 ~ /^\[.*\]/ { print $2 }
   ' ${config_file}
}

# Function : set_config_vars config_file config [var_prefix]
# Purpose  : Set variables (optionaly prefixed by var_prefix) from config in config file
set_config_vars()
{
   typeset config_file=$1
   typeset config=$2
   typeset var_prefix=$3
   typeset config_vars

   config_vars=$( 
        awk -F= -v Config="${config}" -v Prefix="${var_prefix}" '
        BEGIN { 
           Config = toupper(Config);
           patternConfig = "\\[" Config "]";
        }
        toupper($0)  ~ patternConfig,(/\[/ && toupper($0) !~ patternConfig)  { 
           if (/\[/ || NF <2) next;
           sub(/^[[:space:]]*/, "");
           sub(/[[:space:]]*=[[:space:]]/, "=");
           print Prefix $0;
        } ' ${config_file} )

   eval "${config_vars}"
}














########################################################
#                                                      #
#  CONFIGURACION                                       #
#                                                      #
########################################################

# Configuración casa
CASA_MOODLE_DATA="/var/lib/moodle"
CASA_MOODLE_RECURSOS="/var/www/recursos"
CASA_MYSQL_PASSWORD=""

# Configuración clase
CLASE_MOODLE_DATA="/var/lib/moodle"
CLASE_MOODLE_RECURSOS="/net/share"
CLASE_MYSQL_PASSWORD=""

########################################################
#                                                      #
#  FIN DE LA CONFIGURACION. NO TOCAR A PARTIR DE AQUÍ  #
#                                                      #
########################################################

# Funcion de ayuda
usage() {
   CMD_NAME="$(basename "$0")"
   echo "Usage: " "$CMD_NAME {backup|restore} {casa|clase}"

}

config() {

	# TODO: Obtener la contraseña de Mysql como lo hace automysqlbackup
	# TODO: Obtener el directorio MOODLE_DATA del fichero de configuración de moodle.
	# TODO: Guardar la versión de moodle al hacer backup, comprobar que es la misma al hacer restore y si es diferente dar un aviso.
	BACKUP=$LUGAR	

	if [ ! -d $HOME/.unison ]; then mkdir $HOME/.unison; fi

	case $LUGAR in
		casa)
			RESTORE=clase
			MOODLE_DATA=$CASA_MOODLE_DATA
			MOODLE_RECURSOS=$CASA_MOODLE_RECURSOS
			MYSQL_PASSWORD=$CASA_MYSQL_PASSWORD
			
			# Creamos los ficheros de sincronización de moodledata y recursos
			echo "root = " $CASA_MOODLE_DATA > $HOME/.unison/moodledata_casa.prf
			echo "root = " `pwd`/moodlesync/moodledata >> $HOME/.unison/moodledata_casa.prf
			echo "ignore = Path {lang}" >> $HOME/.unison/moodledata_casa.prf
			echo "ignore = Path {upgradelogs}" >> $HOME/.unison/moodledata_casa.prf
			echo "ignore = Name {.htaccess}" >> $HOME/.unison/moodledata_casa.prf
			echo "perms = 0" >> $HOME/.unison/moodledata_casa.prf
			echo "root = " $CASA_MOODLE_RECURSOS > $HOME/.unison/recursos_casa.prf
			echo "root = " `pwd`/moodlesync/recursos >> $HOME/.unison/recursos_casa.prf
			echo "perms = 0" >> $HOME/.unison/recursos_casa.prf
			;;
		clase)
			RESTORE=casa			
			MOODLE_DATA=$CLASE_MOODLE_DATA
			MOODLE_RECURSOS=$CLASE_MOODLE_RECURSOS
			MYSQL_PASSWORD=$CLASE_MYSQL_PASSWORD
			echo "root = " $CLASE_MOODLE_DATA > $HOME/.unison/moodledata_clase.prf
			echo "root = " `pwd`/moodlesync/moodledata >> $HOME/.unison/moodledata_clase.prf
			echo "ignore = Path {lang}" >> $HOME/.unison/moodledata_clase.prf
			echo "ignore = Path {upgradelogs}" >> $HOME/.unison/moodledata_clase.prf
			echo "perms = 0" >> $HOME/.unison/moodledata_clase.prf
			echo "ignore = Name {.htaccess}" >> $HOME/.unison/moodledata_clase.prf
			echo "root = " $CLASE_MOODLE_RECURSOS > $HOME/.unison/recursos_clase.prf
			echo "root = " `pwd`/moodlesync/recursos >> $HOME/.unison/recursos_clase.prf
			echo "perms = 0" >> $HOME/.unison/recursos_clase.prf			
			;;
		*)
			usage
			exit 1
	esac

	if [ ! -d $MOODLE_DATA ]; then
		echo "Directorio MOODLE_DATA mal configurado."
		exit 1
	fi

	if [ ! -d $MOODLE_RECURSOS ]; then
		echo "Directorio MOODLE_RECURSOS mal configurado."
		exit 1
	fi

	# TODO: Si no es posible crear los directorios dar mensaje de error
   	if [ ! -d moodlesync ]; then mkdir moodlesync; fi
	if [ ! -d moodlesync/mysql_casa ]; then mkdir moodlesync/mysql_casa; fi
	if [ ! -d moodlesync/mysql_clase ]; then mkdir moodlesync/mysql_clase; fi
	if [ ! -d moodlesync/moodledata ]; then mkdir moodlesync/moodledata; fi
	if [ ! -d moodlesync/.unison ]; then mkdir moodlesync/.unison; fi

	if !( which unison-gtk > /dev/null ); then
		echo "Error: unison-gtk no está instalado."
		exit 1
	fi

	if !( which 7z > /dev/null ); then
		echo "Error: 7z no está instalado."
		exit 1
	fi

}

sync_moodledata() {
	sudo unison-gtk moodledata_$LUGAR.prf

	sudo chmod -R 775 $MOODLE_DATA
	sudo chown -R www-data $MOODLE_DATA
	sudo chgrp -R www-data $MOODLE_DATA
}

sync_recursos() {
	sudo unison-gtk recursos_$LUGAR.prf

	sudo chmod -R 775 $MOODLE_RECURSOS
	sudo chown -R www-data $MOODLE_RECURSOS
	sudo chgrp -R www-data $MOODLE_RECURSOS
}

backup() {
	# TODO: Comprobar que está la herramienta mysqldump
	# TODO: Comprobar que está la base de datos de moodle
	# TODO: Comprobar que no hay un moodle.sql anterior
	if ! ( mysqldump -h 127.0.0.1 -u root --password=$MYSQL_PASSWORD -C -Q -e -a moodle > /tmp/moodle.sql ); then
		exit 1
	fi

	# TODO: Comprobar que el zip no existe anteriormente
	# TODO: Guardar los últimos X backups

	# TODO: Realizar una tuberia para no crear fichero moodle.sql intermedio
	if ! (7z a -tzip moodlesync/mysql_$BACKUP/moodle_$BACKUP.zip /tmp/moodle.sql ); then
		exit 1
	fi

	sync_moodledata
	sync_recursos

	echo "backup "$LUGAR":" `date` >> moodlesync/sync.log
}

restore() {
	
	# TODO: Comprobar si existe el fichero a restaurar.
	# TODO: Dar a elegir restaurar un backup concreto, por defecto restaurar el último
	if ! ( 7z x -tzip -y moodlesync/mysql_$RESTORE/moodle_$RESTORE.zip -o/tmp ); then
		exit 1
	fi

	if ! ( mysql -uroot -p$MYSQL_PASSWORD moodle < /tmp/moodle.sql ); then
		exit 1
	fi

	sync_moodledata
	sync_recursos


	echo "restore "$LUGAR":" `date` >> moodlesync/sync.log
}


